home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / apl / gview120.lzh / gviewsrc.lzh / mag_load.c < prev    next >
C/C++ Source or Header  |  1995-02-13  |  2KB  |  69 lines

  1. /*    Copyright 1992 H.Ogasawara (COR.)    */
  2.  
  3. #include    <corlib.h>
  4. #include    <sys_doslib.h>
  5. #include    "gview.h"
  6.  
  7. #define        MAGLOADER    "mag.r"
  8.  
  9. static int        sizex, sizey;
  10. static unsigned char    com[1024];
  11. static int        color;
  12. static unsigned char    *mag_palet;
  13.  
  14. static
  15. size_check( fname )
  16. char    *fname;
  17. {
  18.     int    fn;
  19.     unsigned char    *p;
  20.     if( (fn= OPEN( fname, 0 )) >= 0 ){
  21.         READ( fn, p= com, 1024 );
  22.         CLOSE( fn );
  23.         if( strncmp( p, "MAKI02  ", 8 ) ){
  24.             GV_Err( "magフォーマットが違います" );
  25.             return    FALSE;
  26.         }
  27.         for( com[1023]= 0x1a ; *p != 0x1a ; p++ );
  28.         *p++= '\0';
  29.         for( com[1023]= 0    ; *p != 0x00 ; p++ );
  30.         mag_palet= p+32;
  31.         p++;        /* skip ヘッダ先頭    */
  32.         p++;        /* 機種コード    */
  33.         p++;        /* 機種依存フラグ    */
  34.         color= *p++ & 128;    /* スクリーンモード    */
  35.         sizex= (p[1]<<8)+*p; p+= 2;    /* 開始X */
  36.         sizey= (p[1]<<8)+*p; p+= 2;    /* 開始Y */
  37.         sizex= (p[1]<<8)+*p - sizex +1; p+= 2;    /* 終了X */
  38.         sizey= (p[1]<<8)+*p - sizey +1; p+= 2;    /* 終了Y */
  39.         return    TRUE;
  40.     }
  41.     GV_Err( "magオープンできません" );
  42.     return    FALSE;
  43. }
  44.  
  45. GVIEW *
  46. GV_Load_Mag( fname )
  47. char    *fname;
  48. {
  49.     if( size_check( fname ) ){
  50.         GVIEW    *gp;
  51.         if( !(gp= GV_Alloc( sizex, sizey, color ?
  52.                             WindowAttrGraphic256 :
  53.                             WindowAttrGraphic16,
  54.                             fname, com+8, 0 )) ){
  55.             GV_Err( "メモリが足りません" );
  56.             return    NULL;
  57.         }
  58.         if( GV_VramGetExec( MAGLOADER, fname, gp ) ){
  59.             MFREE( gp );
  60.             GV_Err2( MAGLOADER, "実行できませんでした" );
  61.             return    NULL;
  62.         }
  63.         memcpy( gp->base_palet, mag_palet, GV_PaletSize(gp->color)*3 );
  64.         GV_BaseToPalet( gp );
  65.         return    gp;
  66.     }
  67.     return    NULL;
  68. }
  69.